#include "studentInfo.h"
#include <stdbool.h>

int addStudentInfo()
{
    if (stuSys.stu_num > MAX_STUDENT_NUM)
    {
        printf("添加学生信息失败！\n");
        return -1;
    }
    student_t s = inputAddInfo();
    stuSys.stu_arr[stuSys.stu_num++] = s;
    printf("学号%s\n", s.no);
    printf("添加学生信息成功\n");
    printf("现在有%d个学生\n", stuSys.stu_num);
    writeToFile();
    return 0;
}
int delStudentInfo()
{
    printf("请输入要删除学生的学号:");
    char *Sno = inputSno();
    int i;
    for (i = 0; i < stuSys.stu_num; i++)
    {
        if (strcmp(Sno, stuSys.stu_arr[i].no) == 0)
        {
            for (int j = i; j < stuSys.stu_num - 1; j++)
            {
                stuSys.stu_arr[j] = stuSys.stu_arr[j + 1];
            }
            break;
        }
    }
    if (i == stuSys.stu_num)
    {
        printf("没有此学生！\n");
        free(Sno);
        return -1;
    }
    else
    {
        printf("删除成功\n");
        free(Sno);
        stuSys.stu_num--;
        unlink(FILE_NAME);
        writeToFile();
        return 1;
    }
}
int updateStudentInfo()
{
    printf("请输入要修改学生的学号:");
    char *Sno = inputSno();
    int i;
    for (i = 0; i < stuSys.stu_num; i++)
    {
        if (strcmp(Sno, stuSys.stu_arr[i].no) == 0)
        {
            int upType;
            char str[20] = {0};
            printf("请输入要修改的字段名和值:");
            scanf("%d %s", &upType, str);
            switch (upType)
            {
            case SNO:
                memcpy(stuSys.stu_arr[i].no, str, strlen(str));
                break;
            case SNAME:
                memcpy(stuSys.stu_arr[i].name, str, strlen(str));
                break;
            case SSEX:
                memcpy(stuSys.stu_arr[i].sex, str, strlen(str));
                break;
            case SDEPT:
                memcpy(stuSys.stu_arr[i].dept, str, strlen(str));
                break;
            default:
                printf("不存在该字段名\n");
                return -1;
            }
            break;
        }
    }
    if (i == stuSys.stu_num)
    {
        printf("没有此学生！\n");
        free(Sno);
        return -1;
    }
    else
    {
        printf("修改成功\n");
        free(Sno);
        unlink(FILE_NAME);
        writeToFile();
        return 1;
    }
}
void printfAllStu()
{
    for (int i = 0; i < stuSys.stu_num; i++)
    {
        student_t s = stuSys.stu_arr[i];
        printf("%s %s %s %s %s\n", s.no, s.name, s.sex, s.age, s.dept);
    }
}

void PrintfStuFromNo()
{
    printf("请输入要查看学生的学号：");
    char *sno = inputSno();
    int i;
    for (i = 0; i < stuSys.stu_num; i++)
    {
        student_t s = stuSys.stu_arr[i];
        if (strcmp(s.no, sno) == 0)
        {
            printf("%s %s %s %s %s\n", s.no, s.name, s.sex, s.age, s.dept);
            break;
        }
    }
    if (i == stuSys.stu_num)
    {
        printf("没有此学生！\n");
    }
    free(sno);
}

char *inputSno()
{
    char *sno = (char *)malloc(10);
    scanf("%s", sno);
    return sno;
}

student_t inputAddInfo()
{
    student_t s;
    printf("学号：");
    scanf("%s", s.no);
    printf("姓名：");
    scanf("%s", s.name);
    printf("性别：");
    scanf("%s", s.sex);
    printf("年龄：");
    scanf("%s", s.age);
    printf("院系：");
    scanf("%s", s.dept);
    return s;
}

int writeToFile()
{
    FILE *fd = fopen(FILE_NAME, "w+");
    if (fd < 0)
    {
        printf("打开文件失败！\n");
        return -1;
    }

    for (int i = 0; i < stuSys.stu_num; i++)
    {
        student_t s = stuSys.stu_arr[i];
        fprintf(fd, "%s %s %s %s %s\n", s.no, s.name, s.sex, s.age, s.dept);
        fflush(fd);
    }
    fclose(fd);
    return 0;
}
int readFromFile()
{
    FILE *fd = fopen(FILE_NAME, "r");
    if (fd < 0)
    {
        printf("打开文件失败！\n");
        return -1;
    }
    student_t s;
    while (fscanf(fd, "%s %s %s %s %s\n", s.no, s.name, s.sex, s.age, s.dept) != EOF)
    {
        stuSys.stu_arr[stuSys.stu_num++] = s;
    }
    fclose(fd);
    return 0;
}